package com.atguigu.gulimall.auth;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * @Author 小坏
 * @Date 2021/1/11 11:41
 * @Version 1.0
 * @program: 父工程 gulimall 万物起源之地
 * 认证服务
 *
 * 核心原理
 *  1)、@EnableRedisHttpSession 导入了 @RedisHttpSessionConfiguration配置
 *      1、给容器中加了一个组件(R相当于存session的库)
 *            SessionRepository=>>>。【RedisOperationsSessionRepository】==》(相当于ridis操作session的dao)  session的增删改查封装类
 *      2、SessionRepositoryFilter==》Filter: session存储的过滤器;每个请求都必须经过filter
 *           1、创建的时候。就自动从容器中获取到了SessionRepository
 *           2、原始的request,request都被包装了SessionRepositoryRequestWrapper，SessionRepositoryResponseWrapper
 *           3、以后获取session。request.getSession()
 *           4、wrappedRequest.getSession(); ==> SessionRepository 中获取到的
 *
 *     还有：自动延期：redis中的数据也有过期时间
 *
 *
 * 解释：
 *    只用了简单的包装模式（装饰者）、将原生的request一包装、以后调用getSession都是调用它自己写的方法
 *    wrappedRequest.getSession(); ==> SessionRepository 全是从这里面中获取到的
 */
@EnableRedisHttpSession
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class GuliMallAuthServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(GuliMallAuthServerApplication.class, args);
    }
}
